package com.yixia.system.mapper.system;


import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.yixia.common.core.domain.entity.SysDept;
import com.yixia.common.utils.StringUtils;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.Arrays;
import java.util.List;

/**
* @author 35038
* @description 针对表【sys_dept(部门表)】的数据库操作Mapper
* @createDate 2023-07-10 22:01:45
* @Entity com.java1234.entity.SysDept
*/
@Mapper
public interface SysDeptMapper extends BaseMapper<SysDept> {




    /**
     * 看deptId是否在祖籍列表中
     *
     * @param deptId
     * @return
     */
    public List<SysDept> selectChildrenDeptById(Long deptId);

    /**
     * 修改子元素关系
     *
     * @param depts 子元素
     * @return 结果
     */
    public int updateDeptChildren(@Param("depts") List<SysDept> depts);

    /**
     * 修改所在部门正常状态
     *
     * @param deptIds 部门ID组
     */
    public default int updateDeptStatusNormal(Long[] deptIds){
        if(!StringUtils.isNotEmpty(deptIds)){
            return 0;
        }
        List<Long> list = Arrays.asList(deptIds);
        LambdaUpdateWrapper<SysDept> updateWrapper = new LambdaUpdateWrapper<>();
        // 进行指定得到修改
        updateWrapper.set(SysDept::getStatus, "0").in(SysDept::getDeptId, list);

        return this.update(null, updateWrapper);
    }

    /**
     * 根据dept来查询部门信息
     * @param dept
     * @return
     */
    default List<SysDept> selectDeptList(SysDept dept){
        LambdaQueryWrapper<SysDept> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysDept::getDelFlag, '0');/*0表示没有被删除*/
        queryWrapper.eq(StringUtils.isNotEmpty(dept.getDeptId()), SysDept::getDeptId, dept.getDeptId());
        queryWrapper.eq(StringUtils.isNotEmpty(dept.getParentId()), SysDept::getParentId, dept.getParentId());
        queryWrapper.like(StringUtils.isNotEmpty(dept.getDeptName()), SysDept::getDeptName, dept.getDeptName());
        queryWrapper.eq(StringUtils.isNotEmpty(dept.getStatus()), SysDept::getStatus, dept.getStatus());
        // 设置排序条件
        queryWrapper.orderByAsc(SysDept::getParentId).orderByAsc(SysDept::getOrderNum);
        return this.selectList(queryWrapper);
    }

    /**
     * 判断该部门下有没有子部门
     * @param deptId
     * @return
     */
    default boolean hasChildByDeptId(Long deptId){
        LambdaQueryWrapper<SysDept> queryWrapper = new LambdaQueryWrapper<>();
        queryWrapper.eq(SysDept::getParentId, deptId);
        queryWrapper.eq(SysDept::getStatus, '0');
        queryWrapper.eq(SysDept::getDelFlag, '0');
        List<SysDept> list = this.selectList(queryWrapper);
        return list.size() > 0;
    }

    /**
     * 根据角色ID查询部门树信息
     *
     * @param roleId 角色ID
     * @param deptCheckStrictly 部门树选择项是否关联显示
     * @return 选中部门列表
     */
    public List<Long> selectDeptListByRoleId(@Param("roleId") Long roleId, @Param("deptCheckStrictly") boolean deptCheckStrictly);

}




